package core;

/**
 * @author Max
 * <br>
 * date 2019/12/18 15:57
 * <br>
 * ioc容器的顶级接口
 * <p>
 * 定义ioc容器所具有的核心功能
 * @version 0.1
 */

public interface BeanFactory {

    /**
     * 根据String类型的bean名称 得到这个对象
     * @param beanName ioc容器 中bean 的名称
     * @return bean对象
     * @since 0.1
     */
    Object getBean(String beanName);

    /**
     * 获取指定类型的bean
     * @param beanName ioc容器中bean名称
     * @param tClass class对象
     * @param <T> 泛型方法
     * @return bean对象
     */
    <T> T getBean(String beanName,Class<T> tClass);

    /**
     * 判断IOC中是否包含指定的name
     * @param beanName name
     * @return 是否包含
     */
    boolean containsBean(final String beanName);

    /**
     * 指定的 bean 和需要的类型二者是否匹配。
     * @param beanName bean
     * @param requiredType 需要的类型
     * @return 是否匹配
     */
    boolean isTypeMatch(final String beanName,final Class requiredType);
}
